package com.greensam.pixelengine.facade;

import com.greensam.pixelengine.pojo.base.DeleteRequest;
import com.greensam.pixelengine.pojo.base.PaginationResponse;
import com.greensam.pixelengine.pojo.vo.user.request.UserPageRequest;
import com.greensam.pixelengine.pojo.vo.user.request.UserSaveRequest;
import com.greensam.pixelengine.pojo.vo.user.request.UserLoginRequest;
import com.greensam.pixelengine.pojo.vo.user.request.UserRegisterRequest;
import com.greensam.pixelengine.pojo.entity.UserPo;
import com.greensam.pixelengine.pojo.vo.user.response.LoginUserVo;
import com.greensam.pixelengine.pojo.vo.user.response.UserVo;
import jakarta.servlet.http.HttpServletRequest;

import java.util.List;
import java.util.Optional;

/**
 * 用户门面服务
 *
 * @author Macro_Ray
 * @since 2025/6/17 11:45
 */
public interface UserFacadeService {

    /**
     * 用户注册
     *
     * @param request 请求参数
     * @return long
     * @author Macro_Ray
     * @since 2025/6/17
     */
    Long userRegister(UserRegisterRequest request);

    /**
     * 用户登录
     *
     * @param param   请求参数
     * @param request 请求
     * @return 脱敏后的用户信息
     * @author Macro_Ray
     * @since 2025/6/17
     */
    LoginUserVo userLogin(UserLoginRequest param, HttpServletRequest request);

    /**
     * 获取当前登录用户
     *
     * @param request 请求
     * @author Macro_Ray
     * @since 2025/6/17
     */
    UserPo getLoginUser(HttpServletRequest request);


    /**
     * 获取当前登录用户（脱敏）
     *
     * @param request 请求
     * @return UserLoginVo 脱敏后的登录用户信息
     * @author Macro_Ray
     * @since 2025/6/17
     */
    LoginUserVo getLoginUserVo(HttpServletRequest request);

    /**
     * 用户登出
     *
     * @param request 请求
     * @author Macro_Ray
     * @since 2025/6/17
     */
    Boolean userLogout(HttpServletRequest request);


    /**
     * 保存用户
     *
     * @param httpServletRequest
     * @param request            请求
     * @author Macro_Ray
     * @since 2025/6/19
     */
    UserPo saveUser(UserSaveRequest request, Long userId);


    /**
     * 删除用户
     *
     * @param httpServletRequest
     * @param request            请求
     * @author Macro_Ray
     * @since 2025/6/19
     */
    Boolean deleteUser(DeleteRequest request, Long userId);

    /**
     * 分页获取用户信息（脱敏）
     *
     * @param request 请求
     * @author Macro_Ray
     * @since 2025/6/19
     */
    PaginationResponse<UserVo> pageUser(UserPageRequest request);

    /**
     * 根据id获取用户信息
     *
     * @param id 用户id
     * @return UserPo
     * @author Macro_Ray
     * @since 2025/6/19
     */
    Optional<UserPo> getUserById(Long id);

    /**
     * 获取用户信息（脱敏）
     *
     * @param id 用户id
     * @return UserVo 脱敏后的用户信息
     * @author Macro_Ray
     * @since 2025/6/19
     */
    UserVo getUserVo(Long id);

    /**
     * 获取角色的所有用户
     *
     * @param roleId 角色id
     * @return UserVo
     * @author Macro_Ray
     * @since 2025/6/30
     */
    List<UserVo> getUsersByRoleId(Long roleId);

}
